
//2588.统计美丽子数组数目
class Solution {
public:
    long long beautifulSubarrays(vector<int>& nums) {
        //题目中所说的相同二进制的第k位是1,就将两个数都将去2^k,将该位取出,这不就是将两个数进行按位异或操作嘛
        //所以还是使用前缀和,统计每个位置按位异或的结果,在前面的前缀和中找一个满足before^sumi=0的
        //即在前面找一个before=sumi

        int n = nums.size();
        unordered_map<int,int> m;   //记录前缀和中按位异或的结果
        m.insert({0,1});

        long long ret = 0,sumi = 0;
        for(int i = 0; i < n ; i++)
        {
            sumi ^= nums[i];
            if(m.count(sumi)) ret += m[sumi];
            m[sumi]++;
        }
        return ret;
    }
};